PROMPT_TEMPLATES = {
    # 核心信息提取
    "核心要点提取": """请从以下财经文本中提取核心信息，包括：
1. 提到的股票及其相关动态（请标注股票代码）
2. 重要的行业政策和发展动向（分析政策力度和持续性）
3. 值得关注的市场热点和机会（评估持续性）
4. 需要注意的风险提示（评估风险等级）
5. 事件的市场影响评估（短期/中期/长期）\n\n文本内容：\n{text}""",
    
    # 个股信息提取
    "个股信息提取": """请从以下文本中提取股票相关的关键信息，包括：
1. 股票代码和名称（包括所属板块和行业）
2. 重大事项和业绩情况（量化数据和同比变化）
3. 股价表现和成交特征（技术面特征）
4. 机构评级和调研情况（最新变化）
5. 估值水平分析（与行业对比）\n\n文本内容：\n{text}""",
    
    # 行业信息提取
    "行业信息提取": """请从以下文本中提取行业相关的关键信息，包括：
1. 行业政策和监管动态（政策力度和影响范围）
2. 产业链发展变化（上下游价格传导）
3. 技术突破和创新（技术路线验证）
4. 市场供需情况（量化数据）
5. 行业格局变化（市占率变化）\n\n文本内容：\n{text}""",
    
    # 资金面信息提取
    "资金面信息提取": """请从以下文本中提取资金面相关的关键信息，包括：
1. 主力资金动向（具体流向和规模）
2. 北向资金流向（行业和个股偏好）
3. 机构持仓变动（增减持方向和比例）
4. 大宗交易情况（溢价/折价情况）
5. 融资融券变化（标的变化）\n\n文本内容：\n{text}""",
    
    # 风险信息提取
    "风险信息提取": """请从以下文本中提取风险相关的关键信息，包括：
1. 政策风险提示（可能的政策变化）
2. 市场风险因素（系统性/非系统性）
3. 个股风险事项（经营/财务/合规）
4. 行业风险隐患（周期/竞争/技术）
5. 外部风险因素（国际形势/宏观环境）\n\n文本内容：\n{text}""",
}

# 模板分类
TEMPLATE_CATEGORIES = {
    "信息提取": ["核心要点提取", "个股信息提取", "行业信息提取", "资金面信息提取", "风险信息提取"],
}

# 添加分析师角色定义
ANALYST_ROLES = {
    "首席策略分析师": {
        "title": "首席策略分析师",
        "experience": "20年以上A股市场研究经验",
        "background": "曾在多家大型券商担任首席策略分析师，擅长把握市场脉搏和宏观趋势",
        "specialties": [
            "宏观经济分析",
            "市场趋势研判",
            "投资策略制定",
            "大类资产配置",
            "风险控制策略"
        ],
        "analysis_style": "从宏观到微观，注重市场整体趋势和风险把控"
    },
    
    "行业研究专家": {
        "title": "资深行业研究员",
        "experience": "15年以上行业研究经验",
        "background": "曾获新财富最佳分析师，专注于细分行业研究和产业链分析",
        "specialties": [
            "产业链分析",
            "行业格局研究",
            "公司调研",
            "竞争优势分析",
            "商业模式研究"
        ],
        "analysis_style": "深入产业链，注重企业核心竞争力分析"
    },
    
    "量化分析师": {
        "title": "高级量化分析师",
        "experience": "12年量化研究经验",
        "background": "具有数学和计算机双重背景，专注于数据挖掘和量化模型开发",
        "specialties": [
            "数据分析",
            "技术指标研究",
            "市场情绪量化",
            "因子挖掘",
            "量化策略开发"
        ],
        "analysis_style": "基于数据和模型，注重客观指标分析"
    },
    
    "政策研究专家": {
        "title": "首席政策分析师",
        "experience": "18年政策研究经验",
        "background": "曾在国家级智库任职，对政策制定过程和影响有深入研究",
        "specialties": [
            "政策导向分析",
            "政策影响评估",
            "行业政策解读",
            "监管趋势研究",
            "政策机会挖掘"
        ],
        "analysis_style": "注重政策面分析，善于发现政策机会"
    }
}

def get_template_names():
    """获取所有模板名称"""
    return list(PROMPT_TEMPLATES.keys())

def get_template_categories():
    """获取模板分类"""
    return TEMPLATE_CATEGORIES

def get_templates_by_category(category: str) -> list:
    """获取指定分类下的所有模板名称"""
    return TEMPLATE_CATEGORIES.get(category, [])

def get_template(name: str) -> str:
    """获取指定名称的模板"""
    return PROMPT_TEMPLATES.get(name, "")

def format_prompt(template: str, text: str) -> str:
    """使用文本格式化提示词模板"""
    return template.format(text=text)

def get_category_for_template(template_name: str) -> str:
    """获取模板所属的分类"""
    for category, templates in TEMPLATE_CATEGORIES.items():
        if template_name in templates:
            return category
    return "其他"

def get_role_prompt(role_name: str) -> str:
    """
    根据角色名称生成角色提示词
    """
    role = ANALYST_ROLES.get(role_name)
    if not role:
        return ""
    
    return f"""你现在是一位{role['title']}，拥有{role['experience']}。{role['background']}。

专业特长：
{chr(10).join(f'- {specialty}' for specialty in role['specialties'])}

分析风格：
{role['analysis_style']}

作为专业的{role['title']}，你将从以下几个方面进行分析："""

def combine_roles(main_role: str, assistant_roles: list) -> str:
    """
    组合多个角色的专业特长
    """
    main = ANALYST_ROLES.get(main_role)
    if not main:
        return ""
    
    # 主角色提示词
    prompt = f"""你现在是一位{main['title']}，拥有{main['experience']}。{main['background']}。
作为首席分析师，你将整合多个专业视角进行分析。

【主要分析视角】（{main['title']}）：
专业特长：
{chr(10).join(f'- {specialty}' for specialty in main['specialties'])}

分析风格：
{main['analysis_style']}"""

    # 添加辅助角色视角
    if assistant_roles:
        prompt += "\n\n【辅助分析视角】："
        for role_name in assistant_roles:
            role = ANALYST_ROLES.get(role_name)
            if role:
                prompt += f"\n\n{role['title']}视角：\n"
                prompt += f"专业特长：\n{chr(10).join(f'- {specialty}' for specialty in role['specialties'])}"

    prompt += "\n\n作为跨领域分析团队的首席分析师，你将从以下几个方面进行全面分析："
    return prompt

def combine_templates(template_names: list, text: str, main_role: str = "首席策略分析师", assistant_roles: list = None) -> str:
    """
    组合多个模板的提示词，并设定分析师角色组合
    """
    # 设定角色和背景
    role_prompt = combine_roles(main_role, assistant_roles or []) + """

分析要求：
1. 信息甄别：区分事实、传闻和推测，标注信息可靠程度
2. 逻辑推导：说明分析依据和推理过程
3. 影响评估：分析对市场、行业、个股的影响程度和持续时间
4. 机会识别：发现潜在的投资机会，并说明逻辑链条
5. 风险提示：全面评估各类风险，并给出应对建议

请按照以下几个方面进行分析：\n\n"""

    # 添加具体分析要点
    for i, name in enumerate(template_names, 1):
        template = PROMPT_TEMPLATES.get(name, "")
        if template:
            points = template.split("包括：\n")[1].split("\n\n文本内容：")[0]
            role_prompt += f"第{i}部分. {name}：\n{points}\n\n"
    
    # 修改输出格式要求
    output_format = """请按照以下格式进行分析：

【分析框架】
1. 每个部分使用明确的标题和子标题
2. 重要数据和结论用【】标注
3. 投资机会用📈标注，风险提示用⚠️标注
4. 不确定信息标注可信度（高/中/低）

【内容要求】
1. 数据必须准确，重要信息要有来源
2. 分析要有逻辑链条，避免简单结论
3. 关注信息之间的关联性和传导效应
4. 给出明确的投资建议或风险提示

以下是需要分析的文本：\n\n"""
    
    final_prompt = role_prompt + output_format + text
    
    # 修改总结要求
    final_prompt += """\n\n【总结要求】
1. 最重要的1-2个投资机会或风险（包括逻辑链条和验证方式）
2. 需要持续跟踪的3个关键指标或事项（说明重要性）
3. 对后市的判断（分短期/中期，说明依据）
4. 投资建议（包括方向、时间窗口、注意事项）"""
    
    return final_prompt